home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / gnu / glibc108.gz / glibc108 / glibc-1.08.1 / sysdeps / sparc / sparc8 / submul_1.S < prev    next >
Text File  |  1994-04-26  |  2KB  |  58 lines

  1. ! SPARC v8 __mpn_submul_1 -- Multiply a limb vector with a limb and
  2. ! subtract the result from a second limb vector.
  3.  
  4. ! Copyright (C) 1992, 1993, 1994 Free Software Foundation, Inc.
  5.  
  6. ! This file is part of the GNU MP Library.
  7.  
  8. ! The GNU MP Library is free software; you can redistribute it and/or modify
  9. ! it under the terms of the GNU Library General Public License as published by
  10. ! the Free Software Foundation; either version 2 of the License, or (at your
  11. ! option) any later version.
  12.  
  13. ! The GNU MP Library is distributed in the hope that it will be useful, but
  14. ! WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  15. ! or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
  16. ! License for more details.
  17.  
  18. ! You should have received a copy of the GNU Library General Public License
  19. ! along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
  20. ! the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  21.  
  22.  
  23. ! INPUT PARAMETERS
  24. ! res_ptr    o0
  25. ! s1_ptr    o1
  26. ! size        o2
  27. ! s2_limb    o3
  28.  
  29. #include "sysdep.h"
  30.  
  31. .text
  32.     .align 4
  33.     .global    C_SYMBOL_NAME(__mpn_submul_1)
  34. C_SYMBOL_NAME(__mpn_submul_1):
  35.     sub    %g0,%o2,%o2        ! negate ...
  36.     sll    %o2,2,%o2        ! ... and scale size
  37.     sub    %o1,%o2,%o1        ! o1 is offset s1_ptr
  38.     sub    %o0,%o2,%g1        ! g1 is offset res_ptr
  39.  
  40.     mov    0,%o0            ! clear cy_limb
  41.  
  42. Loop:    ld    [%o1+%o2],%o4
  43.     ld    [%g1+%o2],%g2
  44.     umul    %o4,%o3,%o5
  45.     rd    %y,%g3
  46.     addcc    %o5,%o0,%o5
  47.     addx    %g3,0,%o0
  48.     subcc    %g2,%o5,%g2
  49.     addx    %o0,0,%o0
  50.     st    %g2,[%g1+%o2]
  51.  
  52.     addcc    %o2,4,%o2
  53.     bne    Loop
  54.      nop
  55.  
  56.     retl
  57.      nop
  58.